package com.changgou.goods.controller;

import com.changgou.common.constant.StatusCode;
import com.changgou.common.vo.Result;
import com.changgou.goods.pojo.Sku;
import com.changgou.goods.service.SkuService;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/****
 * @Author:www.itheima.com
 * @Description:
 * @Date www.itheima.com
 *****/

@RestController
@RequestMapping("/sku")
@CrossOrigin
public class SkuController {

    @Autowired
    private SkuService skuService;


    /**
     * 扣减库存
     * @param username 用户名
     * @return
     */
    @GetMapping("/decr/count")
    public Result decrCount(String username){
        try {
            skuService.decrCount(username);
            return new Result("扣减库存成功！");

        } catch (Exception e) {
            e.printStackTrace();
        }
        return new Result(false, StatusCode.ERROR, "扣减库存失败！");
    }

    /**
     * 根据状态查询数据
     * @param status 商品sku的状态
     * @return
     */
    @GetMapping("/status/{status}")
    public Result<List<Sku>> findByStatus(@PathVariable String status){
        List<Sku> list=skuService.findByStatus(status);
        return new Result<List<Sku>>("查询成功",list);
    }

    /***
     * Sku分页条件搜索实现
     * @param sku: 查询条件
     * @param page:当前页
     * @param size:每页显示多少条
     * @return 查询结果
     */
    @PostMapping(value = "/search/{page}/{size}" )
    public Result<PageInfo<Sku>> findPage(@RequestBody(required = false)  Sku sku, @PathVariable  int page, @PathVariable  int size){
        //调用SkuService实现分页条件查询Sku
        PageInfo<Sku> pageInfo = skuService.findPage(sku, page, size);
        return new Result<PageInfo<Sku>>("查询成功！", pageInfo);
    }

    /***
     * Sku分页搜索实现
     * @param page:当前页
     * @param size:每页显示多少条
     * @return 查询结果
     */
    @GetMapping(value = "/search/{page}/{size}" )
    public Result<PageInfo<Sku>> findPage(@PathVariable  int page, @PathVariable  int size){
        //调用SkuService实现分页查询Sku
        PageInfo<Sku> pageInfo = skuService.findPage(page, size);
        return new Result<PageInfo<Sku>>("查询成功！", pageInfo);
    }

    /***
     * 多条件搜索品牌数据
     * @param sku 查询条件
     * @return 查询结果
     */
    @PostMapping(value = "/search" )
    public Result<List<Sku>> findList(@RequestBody(required = false)  Sku sku){
        //调用SkuService实现条件查询Sku
        List<Sku> list = skuService.findList(sku);
        return new Result<List<Sku>>("查询成功！", list);
    }

    /***
     * 根据ID删除品牌数据
     * @param id 主键
     * @return 查询结果
     */
    @DeleteMapping(value = "/{id}" )
    public Result delete(@PathVariable Long id){
        //调用SkuService实现根据主键删除
        skuService.delete(id);
        return new Result(true, StatusCode.OK, "删除成功！");
    }

    /***
     * 修改Sku数据
     * @param sku 更新对象
     * @return 操作结果
     */
    @PutMapping
    public Result update(@RequestBody  Sku sku){
        //调用SkuService实现修改Sku
        skuService.update(sku);
        return new Result(true, StatusCode.OK, "修改成功！");
    }

    /***
     * 新增Sku数据
     * @param sku 新增对象
     * @return 操作结果
     */
    @PostMapping
    public Result add(@RequestBody  Sku sku){
        //调用SkuService实现添加Sku
        skuService.add(sku);
        return new Result(true, StatusCode.OK, "添加成功！");
    }

    /***
     * 根据ID查询Sku数据
     * @param id 主键
     * @return 查询结果
     */
    @GetMapping("/{id}")
    public Result<Sku> findById(@PathVariable Long id){
        //调用SkuService实现根据主键查询Sku
        Sku sku = skuService.findById(id);
        return new Result<Sku>("查询成功！", sku);
    }

    /***
     * 查询Sku全部数据
     * @return 查询结果
     */
    @GetMapping
    public Result<List<Sku>> findAll(){
        //调用SkuService实现查询所有Sku
        List<Sku> list = skuService.findAll();
        return new Result<List<Sku>>("查询成功！", list);
    }
}
